const fs = require('fs')
const express = require('express')
const app = express()

// 使用express 自带的中间件
app.use(express.json())

// app.get('/', (req, res) => {
//   res.status(200).send('hello world express!');
// })

const tours = JSON.parse(
  fs.readFileSync(`${__dirname}/dev-data/data/tours-simple.json`)
)

// 创建自己的一个中间件
app.use((req, res, next) => {
  req.requestTime = Date.now()
  console.log(req.requestTime)
  next()
})

const createTour = (req, res) => {
  console.log(req.body)
  // 从数据列表中获取最后一条数据的id 再加1
  let newId = tours[tours.length - 1].id + 1
  const newTours = Object.assign({ id: newId }, req.body)
  tours.push(newTours) // 添加到数据最后一条中
  // 写入数据中
  fs.writeFile(
    './dev-data/data/tours-simple.json',
    JSON.stringify(tours),
    (err) => {
      console.log('写入数据完成!')
    }
  )

  res.status(200).json({
    status: 'success',
    data: {
      tours: newTours,
    },
  })
}

const getAllTours = (req, res) => {
  res.status(200).json({
    status: 'success',
    count: tours.length,
    requestAt: req.requestTime,
    data: {
      tours,
    },
  })
}

const getTour = (req, res) => {
  const tour = tours.find((el) => el.id === +req.params.id)
  console.log(tour)
  if (!tour) {
    return res.status(404).json({
      status: 'fail',
      message: 'Invalid ID',
    })
  }

  res.status(200).json({
    messeage: 'success',
    data: tour,
  })
}

const updateTour = (req, res) => {
  if (+req.params.id > tours.length) {
    return res.status(404).json({
      status: 'fail',
      message: 'Invalid ID',
    })
  }

  res.status(200).json({
    status: 'success',
    data: 'update is here....',
  })
}

const deleteTour = (req, res) => {
  if (+req.params.id > tours.length) {
    return res.status(404).json({
      status: 'fail',
      message: 'Invalid ID',
    })
  }

  res.status(201).json({
    status: 'success',
    data: 'null',
  })
}

const getAllUsers = (req, res) => {
  res.status(500).json({
    status: 'fail',
    message: 'route is yet defined',
  })
}
const getUser = (req, res) => {
  res.status(500).json({
    status: 'fail',
    message: 'route is yet defined',
  })
}
const createUser = (req, res) => {
  res.status(500).json({
    status: 'fail',
    message: 'route is yet defined',
  })
}
const updateUser = (req, res) => {
  res.status(500).json({
    status: 'fail',
    message: 'route is yet defined',
  })
}
const deleteUser = (req, res) => {
  res.status(500).json({
    status: 'fail',
    message: 'route is yet defined',
  })
}

// // 创建
// app.post('/api/v1/tours', createTour)
// // 获取所有旅游信息
// app.get('/api/v1/tours', getAllTours)
// // 根据id获取指定数据
// app.get('/api/v1/tours/:id', getTour)
// // 根据id更新一条数据
// app.patch('/api/v1/tours/:id', updateTour)
// // 根据id删除一条数据
// app.delete('/api/v1/tours/:id', deleteTour)

app.route('/api/v1/tours').get(getAllTours).post(createTour)
app.route('/api/v1/tours/:id').get(getTour).patch(updateTour).delete(deleteTour)

app.route('/api/v1/users').get(getAllUsers).post(createUser)
app.route('/api/v1/users/:id').get(getUser).patch(updateUser).delete(deleteUser)

const port = 3000

app.listen(port, () => {
  console.log(`server is running prot: ${port}`)
})
